#include "logindialog.h"
#include "ui_logindialog.h"
#include "registerdialog.h"
#include "appinitializer.h"
#include <QMessageBox>

// 构造函数：初始化登录对话框
LoginDialog::LoginDialog(UserDao *userDao, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog),
    m_userDao(userDao)  // 注入用户数据访问对象
{
    ui->setupUi(this);
    setWindowTitle("欢迎登录");
    ui->lineEditPassword->setEchoMode(QLineEdit::Password);  // 设置密码输入框为密码模式
    ui->labelError->setVisible(false);  // 初始隐藏错误提示标签
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

// 登录按钮点击事件处理
void LoginDialog::on_btnLogin_clicked()
{
    // 取消注释并修改登录逻辑
    QString username = ui->lineEditUsername->text().trimmed();
    QString password = ui->lineEditPassword->text();

    if (username.isEmpty() || password.isEmpty()) {
        ui->labelError->setText("用户名和密码不能为空");
        ui->labelError->setVisible(true);
        return;
    }

    int role_id;

    if (m_userDao->authenticateUser(username, password, role_id)) {
        // 认证成功：查询完整用户信息
        QString query = "SELECT user_id, username, real_name, role_id FROM user WHERE username = ?";
        QVector<QMap<QString, QVariant>> result = AppInitializer::database()->query(query, {username});

        if (!result.isEmpty()) {
            m_userInfo = result[0]; // 保存完整用户信息
            accept();
        } else {
            ui->labelError->setText("获取用户信息失败");
            ui->labelError->setVisible(true);
        }
    } else {
        ui->labelError->setText("用户名或密码错误");
        ui->labelError->setVisible(true);
    }
}

QMap<QString, QVariant> LoginDialog::getUserInfo() const
{
    return m_userInfo;
}

// 注册按钮点击事件处理
void LoginDialog::on_btnRegister_clicked()
{
    // 创建并显示注册对话框
    RegisterDialog registerDialog(m_userDao, this);
    if (registerDialog.exec() == QDialog::Accepted) {
        // 注册成功后自动填充用户名
        ui->lineEditUsername->setText(registerDialog.getUsername());
        ui->lineEditPassword->setFocus();  // 将焦点设置到密码输入框
    }
}

// 获取登录成功的用户名
QString LoginDialog::getUsername() const
{
    return m_username;
}

// 获取登录用户的角色ID
int LoginDialog::getRoleId() const
{
    return m_role_id;
}
